/*!
 * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
 * SPDX-FileCopyrightText: 2016 ownCloud, Inc.
 * SPDX-License-Identifier: AGPL-3.0-or-later
 */

@mixin header-menu-height() {
	min-height: calc(var(--default-clickable-area) * 1.5); // show at least 1.5 entries
	max-height: calc(100vh - var(--header-height) - (2 * var(--default-grid-baseline)));
}

/* Skip navigation links – show only on keyboard focus */
#skip-actions {
	position: absolute;
	overflow: hidden;
	z-index: 9999;
	top: -999px;
	inset-inline-start: 3px;
	padding: 11px;
	display: flex;
	flex-wrap: wrap;
	gap: 11px;

	&:focus-within {
		top: var(--header-height);
	}
}

/* HEADERS ------------------------------------------------------------------ */
#header {
	// prevent ugly selection effect on accidental selection
	-webkit-user-select: none;
	-moz-user-select: none;
	-ms-user-select: none;
	user-select: none;

	// for legacy the reasons the guest layout also uses the same id, so we need to exclude it as it uses a different layout.
	&:not(.header-guest) {
		display: inline-flex;
		position: absolute;
		top: 0;
		width: 100%;
		z-index: 2000;
		height: var(--header-height);
		box-sizing: border-box;
		justify-content: space-between;
	}

	// This is the first entry in the header, it represents the "home"-link
	#nextcloud {
		padding: 5px 0;
		padding-inline-start: 86px; // logo width + 2 * the inset (padding)
		position: relative;
		height: calc(100% - var(--default-grid-baseline));
		box-sizing: border-box;
		opacity: 1;
		align-items: center;
		display: flex;
		flex-wrap: wrap;
		overflow: hidden;
		margin: 2px;

		&:hover, &:active {
			opacity: 1;
		}

		// the actual logo within the home-link entry
		.logo {
			display: inline-flex;
			background-image: var(--image-logoheader, var(--image-logo, url('../img/logo/logo.svg')));
			background-repeat: no-repeat;
			background-size: contain;
			background-position: center;
			width: 62px;
			position: absolute;
			inset-inline-start: 12px;
			top: 1px;
			bottom: 1px;
			// Invert if not customized and background is bright
			filter: var(--image-logoheader-custom, var(--background-image-invert-if-bright));
		}
	}

	// focus visible styles
	// this adds a small line below all entries when visually focussed
	#nextcloud:focus-visible,
	.app-menu-entry a:focus-visible,
	.header-menu button:first-of-type:focus-visible {
		outline: none;

		&::after {
			content: " ";
			position: absolute;
			inset-block-end: 2px;
			transform: translateX(-50%);
			width: 12px;
			height: 2px;
			border-radius: 3px;
			background-color: var(--color-background-plain-text);
			inset-inline-start: 50%;
			opacity: 1;
		}
	}

	// This is the first part of the header
	// for the user template it contains the application icons (app menu)
	// for public templates this contains e.g. share information
	.header-start {
		display: inline-flex;
		align-items: center;
		flex: 1 0;
		white-space: nowrap;
		min-width: 0;
	}

	// This is the last part of the header
	// It contains the short cuts like unified search, contacts-, or account menu
	.header-end {
		display: inline-flex;
		align-items: center;
		justify-content: flex-end;
		flex-shrink: 1;
		// Add some spacing so the last entry looks ok
		margin-inline-end: calc(3 * var(--default-grid-baseline));

		// legacy JQuery header menus
		// TODO: we already migrated our own code and deprecated it - can be removed together with global jQuery
		> div,
		> form {
			height: 100%;
			position: relative;
			> .menutoggle {
				display: flex;
				justify-content: center;
				align-items: center;
				width: var(--header-height);
				height: var(--header-menu-item-height);
				cursor: pointer;
				opacity: 0.85;
				padding: 0;
				margin: 2px 0;

				&:focus {
					opacity: 1;
				}

				&:focus-visible {
					outline: none;
				}
			}

			> .menu {
				background-color: var(--color-main-background);
				filter: drop-shadow(0 1px 5px var(--color-box-shadow));
				border-radius: var(--border-radius-large);
				box-sizing: border-box;
				z-index: 2000;
				position: absolute;
				max-width: 350px;
				@include header-menu-height();
				inset-inline-end: 8px; // relative to parent
				top: var(--header-height);
				margin: 0;
				overflow-y: auto;

				&:not(.popovermenu) {
					display: none;
				}

				/* Dropdown arrow */
				&:after {
					border: 10px solid transparent;
					border-bottom-color: var(--color-main-background);
					bottom: 100%;
					content: ' ';
					height: 0;
					width: 0;
					position: absolute;
					pointer-events: none;
					inset-inline-end: 10px;
				}

				& > div,
				& > ul {
					-webkit-overflow-scrolling: touch;
					@include header-menu-height();
				}
			}

			.emptycontent {
				h2 {
					font-weight: normal;
					font-size: 16px;
				}
				[class^='icon-'],
				[class*='icon-'] {
					background-size: 48px;
					height: 48px;
					width: 48px;
				}
			}
		}
	}

	// Public layout related headers
	// app related header container ONLY on public shares (layout.public.php)
	.header-appname {
		color: var(--color-background-plain-text);
		font-size: 16px;
		font-weight: bold;
		margin: 0;
		padding: 0;
		padding-inline-end: 5px;
		overflow: hidden;
		text-overflow: ellipsis;
		// Take full width to push the header-shared-by bellow (if any)
		flex: 1 1 100%;

		// container for the public template header information
		.header-info {
			display: flex;
			flex-direction: column;
			overflow: hidden;

			.header-title {
				overflow: hidden;
				text-overflow: ellipsis;
			}

			.header-shared-by  {
				color: var(--color-background-plain-text);
				position: relative;
				font-weight: 300;
				font-size: var(--font-size-small);
				line-height: var(--font-size-small);
				overflow: hidden;
				text-overflow: ellipsis;
			}
		}
	}
}
